Python |
您所在的位置:网站首页 › flask 部署映射数据库 › Python |
在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。 环境:window11+pycharm2020.1+Anaconda4.11.0 +python3.7 Flask-sqlalchemy2.5.1 Flask-Migrate:3.1.0 一、Flask-Migrate安装安装Flask-Migrate。pycharm(或Anaconda Prompt)打开控制台,输入: pip install flask-migrate 安装失败,在导入flask_migrate包的时候,遇到报错:alembic安装失败 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask_migrate Collecting alembic>=0.7 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/60/1e/cabc75a189de0fbb2841d0975243e59bde8b7822bacbb95008ac6fe9ad47/alembic-1.4.2.tar.gz (1.1 MB) 解决: 1.先安装其他历史版本的alembic,打开 alembic · PyPI 点击release history 进入历史版本列表,找到1.4.3版本,点击进入下载页: 点击Download files,下载 alembic-1.4.3-py2.py3-none-any.whl到本地文件夹: 2.打开控制台,cd 进入到放alembic-1.4.3-py2.py3-none-any.whl的文件夹: 输入: pip install alembic-1.4.3-py2.py3-none-any.whl 3.提示安装Mako失败,打开 Mako · PyPI 下载Mako-1.2.1-py3-none-any.whl到本地文件夹: 4.打开控制台,cd 进入到放Mako-1.2.1-py3-none-any.whl的文件夹,输入: pip install Mako-1.2.1-py3-none-any.whl Mako安装成功 5.重新安装alembic,输入: pip install alembic-1.4.3-py2.py3-none-any.whl alembic安装成功。 6.再重新安装flask_migrate: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask_migrate Flask-Migrate安装成功,安装版本为3.1.0。 总结:python相关的插件安装失败的话,查看到哪一步出的问题,然后到官网直接下载对应版本到本地,进行离线安装。 二、Flask-Migrate使用使用flask-migrate 3.1.0 迁移数据库。 flask-migrate 3.0以下一般和flask-script搭配使用,但是在3.0之后 flask-migrate去掉了MigrateCommand这个模块,根据flaks-migrate官方文档,只使用flask-migrate。 1.Flask-Migrate常用命令: flask db history #查看历史迁移信息 flask db current #查看当前数据库版本 flask db init #初始化数据库 flask db migrate -m "init_database" #数据库迁移 flask db upgrade #更新数据库至最新版本 flask db upgrade revision_id #更新数据库至某一版本revision_id flask db downgrade #回退一个版本 flask db downgrade revision_id #回退至某一版本revision_id 2.同步表结构,在控制台中执行命令 a. init 初始化,只需执行一次。 执行init命令,初始化一个迁移文件夹: flask db init 执行完毕项目中生成一个migrations目录(如需重新init,需先删除该目录再init): b. migrate--将模型的变更生成迁移文件 执行migrate命令,把当前的模型添加到迁移文件中: flask db migrate 出现问题: ModuleNotFoundError: No module named 'MySQLdb' 解决方案:安装pymysql并将数据库连接改为 mysql+pymysql: pip install pymysqlb. 将数据库连接改为 mysql+pymysqlc.update--谨慎使用: 当你执行upgrade的时候它就会把除了该程序之外的所有数据表都记录下来准备删除,一但你执行了update,那些非该程序的所有数据表都会被删除! 执行update命令,把迁移文件中对应的数据库操作,真正的映射到数据库中: flask db upgrade 执行完毕,数据库中会生成对应的表: [1] flask-migrate文档: Flask-Migrate — Flask-Migrate documentation |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |